-- 参数列表
-- 1.1 用户id
local userId = ARGV[1]
-- 1.2 活动id
local activityId = ARGV[2]
-- 1.3 生成对应数据的  唯一id  这里是为了 后面 异步更新到数据库
local applyId = ARGV[3]

-- 2 存放在redis中的key
-- 2.1 活动人数 的 key
local numsId = "activity:nums:" .. activityId
-- 2.2 参加活动的用户集合 key
local memberId = "activity:nums:set:" .. activityId

-- 3查看  活动人数有没有超出
local nums = redis.call('get',numsId)
local nums1 = tonumber(nums)
if(nums1 <= 0) then
    -- 如果 人数满了  那么 就返回1  说明人数满了
    return 1
end

if(redis.call('sismember',memberId,userId) == 1) then
    -- 已经 加入了活动
    return 2
end
-- 减少可参加活动的人数
redis.call('incrby',numsId,-1)
-- 将 userId 保存到 集合中
redis.call('sadd',memberId,userId)
-- 发送消息到队列 异步更新到数据库
redis.call('xadd','stream.activity','*','userId',userId,'activityId',activityId,'id',applyId)
return 0
